package beans;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.EntityAlreadyExistsException;
import dao.InexistantEntityException;
import entities.Produit;

@ManagedBean
@RequestScoped
public class ProduitBean {
    
    @ManagedProperty(value = "#{mainBean}")
    private MainBean mainBean;
    
    //nécessaire en @ManagedProperty pour modifier et supprimer produit de la catégorie + modifierProduitForm
    @ManagedProperty("#{param.idProduit}")
    private Integer reference;

    private String nom;

    private String prix;

    private Integer idCategorie;
    
    
    public void setReference(Integer reference) {
        this.reference = reference;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }
    
    public void setPrix(String prix) {
        this.prix = prix;
    }
   
    public void setIdCategorie(Integer idCategorie) {
        this.idCategorie = idCategorie;
    }

    public Integer getReference() {
        return reference;
    }

    public String getNom() {
        return nom;
    }
    
    public String getPrix() {
        return prix;
    }

    public Integer getIdCategorie() {
        return idCategorie;
    }

    public void setMainBean(MainBean mainBean) {
        this.mainBean = mainBean;
    }
    
    
    public List<Produit> getProduits() {        
        
        if(idCategorie != null)
        {
            try
            {
                return (List<Produit>) mainBean.getGestionnaire().getProduitsDeCategorie(idCategorie);
            }
            catch(InexistantEntityException e)
            {
                mainBean.setMessage(e.toString());
            }
        }
        
        return (List<Produit>) mainBean.getGestionnaire().getAll(Produit.class);
        
    }
        
    public void nouveauProduit()
    {        
        try
        {
            Double prixDouble = Double.parseDouble(prix);
            
            mainBean.getGestionnaire().creerProduit(reference, nom, prixDouble, idCategorie);
            mainBean.setMessage("Le produit a été correctement créé.");
            reference = null;
            nom = "";
            prix = "";
            idCategorie = null;            
            
        } catch (InexistantEntityException ex) {
            mainBean.setMessage(ex.toString());
        } catch (EntityAlreadyExistsException ex) {
            mainBean.setMessage(ex.toString());
        } catch (NumberFormatException ex) {
            mainBean.setMessage("Le prix doit être un décimal avec des points.");
        }

        mainBean.setPage("creerProduitForm");
        
    }
    
    public void modifierProduitForm()
    {
        //évite des erreurs d'id lorsqu'on veut modifier un produit d'une liste produits de catégorie (ce n'est pas celui qu'on veut modifier!)
        //marche pas : modifierProduitForm(Integer idProduit)
        
        try
        {
            Produit produit = (Produit) mainBean.getGestionnaire().get(Produit.class, reference);
            reference = produit.getReference();
            nom = produit.getNom();
            prix = String.valueOf(produit.getPrix());
            idCategorie = produit.getCategorie().getId();
            mainBean.setPage("modifierProduitForm");
        }
        catch(InexistantEntityException ex)
        {
            mainBean.setMessage(ex.toString());
        }
    }
    
    public void modifierProduit()
    {
        try
        {
            Double prixDouble = Double.parseDouble(prix);

            mainBean.getGestionnaire().modifierProduit(reference, nom, prixDouble, idCategorie);            
            mainBean.setMessage("Le produit " + reference + " a été correctement modifié.");
            mainBean.setPage("listeProduits");
            idCategorie = null; //pour éviter d'afficher Liste produits avec cette catégorie (en mode voirCategorie)
        }
        catch(InexistantEntityException ex)
        {
            mainBean.setMessage(ex.toString());
        }
        catch (NumberFormatException ex)
        {
            mainBean.setMessage("Le prix doit être un décimal avec des points.");
        }
    }
    
    public void supprimerProduit()
    {
        //ne pas utiliser supprimerProduit(Integer idProduit) car même problème que pour modifierForm, le produit de catégorie supprimé n'est pas le bon.
        
        try
        {
            mainBean.getGestionnaire().supprimerProduit(reference);
            
            mainBean.setMessage("Le produit " + reference + " a été correctement supprimé.");
            mainBean.setPage("listeProduits");
        }
        catch(InexistantEntityException ex)
        {
            mainBean.setMessage(ex.toString());
        }
    }

}
